package com.nuanshui.heatedloan.credit.facade;

import com.nuanshui.heatedloan.credit.form.PayOrderInfoForm;
import com.nuanshui.heatedloan.credit.request.RiskSelectRequest;
import com.nuanshui.heatedloan.credit.response.RiskSelectResponse;
import com.nuanshui.heatedloan.credit.vo.PayOrderInfoVO;
import com.nuanshui.heatedloan.pageable.Pager;

import java.util.Date;
import java.util.List;

/**
 * Created by wangxw on 2017/6/26.
 */
public interface PayOrderInfoService {

    /***
     * 新增订单
     * @param payOrderInfoForm
     */
    void savePayOrderInfo(PayOrderInfoForm payOrderInfoForm);

    /***
     * 修改订单
     * @param payOrderInfoForm
     */
    void updatePayOrderInfo(PayOrderInfoForm payOrderInfoForm) ;

    /***
     * 获取订单
     * @param payOrderInfoForm
     * @return
     */
    PayOrderInfoVO loadVO(PayOrderInfoForm payOrderInfoForm);

    /**
     * 通过订单号来修改订单状态
     * @param orderNo
     * @param orderStatus
     */
    void updateOrderStatusByOrderno(String orderNo, String orderStatus);

    /**
     * 通过用户id获取借款记录(分頁)
     * @param userId
     * @return
     */
    List<PayOrderInfoVO> loadPayOrderInfoVOByUserId(Pager<PayOrderInfoVO> pager, String userId);

    /**
     * 通过用户id获取借款记录
     * @param userId
     * @return
     */
    List<PayOrderInfoVO> loadPayOrderInfoVOByUserId(String userId);

    /**
     * 获取用户的有贷款状态数据
     * @param userId
     * @return
     */
    List<PayOrderInfoVO> loadValidPayOrderInfoVOByUserId(String userId);


    /***
     * 查询用户除了单期贷之外的状态为放款之前的
     * @param userId
     * @return
     */
    List<PayOrderInfoVO> loadNoSingleLoanOrderByUserId(String userId);


    /***
     * 查询单期贷所有的在还款之前的状态
     * @param userId
     * @return
     */
    List<PayOrderInfoVO> loadSingleLoanBeforeReturn(String userId);

    /***
     * 查询所有的未还款的记录  按预期排序  在按还款天数最先的  在按申请时间最前面的
     * @param userId
     * @return
     */

    List<PayOrderInfoVO> loadSingleLoanNoPay(String userId, int borrowType);


    /**
     * 根据id获取订单数据
     * @param id
     * @return
     */
    PayOrderInfoVO loadVOById(String id);

    /**
     * 获取用户总贷款总额
     * @param userId
     * @return
     */
    float loadUserLoanAmount(String userId);

    /**
     * 获取用户总贷款次数
     * @param userId
     * @return
     */
    int loadUserLoanAccount(String userId);


    /***
     * 根据状态和type获取其订单
     * @param userId
     * @param statuss
     * @param types
     * @return
     */
    List<PayOrderInfoVO> loadVOByStatusAndType(String userId, List<Integer> statuss, List<Integer> types);

    /***
     * 获取用户贷款金额
     * @param userId
     * @param statuss
     * @param types
     * @return
     */
    Integer getSumAmtByUserIdByTypeByStatus(String userId, List<Integer> statuss, List<Integer> types);

    /**
     *根据产品类型和用户Id来获取用户订信息(除还款)
     * @param userId
     * @param borrowType
     * @return
     */
    List<PayOrderInfoVO> loadPayOrderInfoVOByUserIdAndBorrowType(String userId, Integer borrowType);

    /**
     * 获取用户单期贷贷款额度和(待还款、逾期贷还款)
     * @param userId
     * @return
     */
    Integer loadSumByUserId(String userId);


    /**
     * 根据订单号获取订单信息
     * @param orderNo
     * @return
     */
    PayOrderInfoVO loadVOByOrderNo(String orderNo);

    /***
     * 根据用户的id和订单号改变订单的状态
     * @param userId
     * @param orderNo
     * @param status
     */
    void updateOrderApprovedStatusByUserIdAndOrderNo(String userId, String orderNo, int status);

    /***
     * 根据用户的id和订单号改变订单的状态
     * @param userId
     * @param orderNo
     * @param status
     */
    void updateOrderLendStatusByUserIdAndOrderNo(String userId, String orderNo, int status, Date date);

    /***
     * 根据用户的id  贷款类型  状态查询贷款此时
     * @param userId
     * @param borrowType
     * @param statuss
     * @return
     */
    Integer getLoanCountByType(String userId, String borrowType, List<Integer> statuss);


    /***
     *获取所有的订单
     * @param userId
     * @param statuss
     * @param types
     * @return
     */
    List<PayOrderInfoVO> loadVOByUserIdByTypeByStatus(String userId, List<Integer> statuss, List<Integer> types);

    /**
     * 查询用户的订单在审核中和放款中数据
     * @param userId
     * @param borrowType
     * @return
     */
    List<PayOrderInfoVO> loadVoAuditByUserId(String userId, Integer borrowType);

    /***
     * 根据用户id   状态  类型返回贷款次数
     * @param userId
     * @param statuss
     * @param types
     * @return
     */
    int  loadUserLoanAccountByStatusAndType(String userId, List<Integer> statuss, List<Integer> types);


    /***
     * 更新用户的订单信息
     * @param orderNo
     * @param overdueFee
     * @param overdueDays
     * @param orderStatus
     */
    void updateLateInfoByOrderNo(String orderNo, int overdueFee, int overdueDays, int orderStatus);


    /***
     * 新旧用户
     * @param userId
     */
   public String isnewOldSigns(String userId);

    /***
     * 风控查询请求接口
     *
     * @param riskSelectRequest
     * @return
     */
   public RiskSelectResponse dealRiskSelect(RiskSelectRequest riskSelectRequest);

    /***
     * 查询上次订单逾期天数
     * @param phone
     * @param userId
     * @return
     */
   public PayOrderInfoVO getOverdueDay(String phone,String userId);

    /***
     * 查询是否有逾期未还的订单
     * @param phone
     * @return
     */
   public List<PayOrderInfoVO>  isOverdue(String phone);

    /***
     * 更新订单的时间
     * @param updateType  1  更新为放款中  2  更新为待还款,及放款成功
     * @param status     2  更新到的状态
     * @param orderNo   3 订单号
     *
     */
   public void updateStatusAndTime(int updateType,int status,String orderNo,String repayMixCardNo);


    /**
     * 查询用户还款记录
     * @param userId
     * @return
     */
    public List<PayOrderInfoVO> loadVoRepayByUserId(String userId);
}
